package com.yanxiuhair.system.service;

import java.util.List;
import java.util.Set;
import com.yanxiuhair.common.core.domain.entity.SysRole;
import com.yanxiuhair.system.domain.SysUserRole;

/**
 * @ClassName:  ISysRoleService   
 * @Description: 角色业务层   
 * @author: gaoxiaochuang   
 * @date:   2021年7月1日 下午5:19:26   
 *     
 * @Copyright: 2021 http://www.yanxiuhair.com/ Inc. All rights reserved. 
 * 注意：本内容仅限于许昌妍秀发制品有限公司内部传阅，禁止外泄以及用于其他的商业目
 */
public interface ISysRoleService {
	/**
	 * 根据条件分页查询角色数据
	 * 
	 * @param role
	 *            角色信息
	 * @return 角色数据集合信息
	 */
	public List<SysRole> selectRoleList(SysRole role);

	/**
	 * 根据用户ID查询角色
	 * 
	 * @param userId
	 *            用户ID
	 * @return 权限列表
	 */
	public Set<String> selectRoleKeys(Long userId);

	/**
	 * 根据用户ID查询角色
	 * 
	 * @param userId
	 *            用户ID
	 * @return 角色列表
	 */
	public List<SysRole> selectRolesByUserId(Long userId);

	/**
	 * 查询所有角色
	 * 
	 * @return 角色列表
	 */
	public List<SysRole> selectRoleAll();

	/**
	 * 通过角色ID查询角色
	 * 
	 * @param roleId
	 *            角色ID
	 * @return 角色对象信息
	 */
	public SysRole selectRoleById(Long roleId);

	/**
	 * 通过角色ID删除角色
	 * 
	 * @param roleId
	 *            角色ID
	 * @return 结果
	 */
	public boolean deleteRoleById(Long roleId);

	/**
	 * 批量删除角色用户信息
	 * 
	 * @param ids
	 *            需要删除的数据ID
	 * @return 结果
	 * @throws Exception
	 *             异常
	 */
	public int deleteRoleByIds(String ids);

	/**
	 * 新增保存角色信息
	 * 
	 * @param role
	 *            角色信息
	 * @return 结果
	 */
	public int insertRole(SysRole role);

	/**
	 * 修改保存角色信息
	 * 
	 * @param role
	 *            角色信息
	 * @return 结果
	 */
	public int updateRole(SysRole role);

	/**
	 * 修改数据权限信息
	 * 
	 * @param role
	 *            角色信息
	 * @return 结果
	 */
	public int authDataScope(SysRole role);

	/**
	 * 校验角色名称是否唯一
	 * 
	 * @param role
	 *            角色信息
	 * @return 结果
	 */
	public String checkRoleNameUnique(SysRole role);

	/**
	 * 校验角色权限是否唯一
	 * 
	 * @param role
	 *            角色信息
	 * @return 结果
	 */
	public String checkRoleKeyUnique(SysRole role);

	/**
	 * 校验角色是否允许操作
	 * 
	 * @param role
	 *            角色信息
	 */
	public void checkRoleAllowed(SysRole role);

	/**
	 * 通过角色ID查询角色使用数量
	 * 
	 * @param roleId
	 *            角色ID
	 * @return 结果
	 */
	public int countUserRoleByRoleId(Long roleId);

	/**
	 * 角色状态修改
	 * 
	 * @param role
	 *            角色信息
	 * @return 结果
	 */
	public int changeStatus(SysRole role);

	/**
	 * 取消授权用户角色
	 * 
	 * @param userRole
	 *            用户和角色关联信息
	 * @return 结果
	 */
	public int deleteAuthUser(SysUserRole userRole);

	/**
	 * 批量取消授权用户角色
	 * 
	 * @param roleId
	 *            角色ID
	 * @param userIds
	 *            需要删除的用户数据ID
	 * @return 结果
	 */
	public int deleteAuthUsers(Long roleId, String userIds);

	/**
	 * 批量选择授权用户角色
	 * 
	 * @param roleId
	 *            角色ID
	 * @param userIds
	 *            需要删除的用户数据ID
	 * @return 结果
	 */
	public int insertAuthUsers(Long roleId, String userIds);
}
